package com.example.service;

import com.example.common.Result;
import com.example.dto.OperationLogQueryDTO;
import com.example.vo.OperationLogDetailVO;
import com.example.vo.OperationLogVO;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 操作日志服务接口
 */
public interface OperationLogService {
    
    /**
     * 记录操作日志
     */
    void recordLog(com.example.entity.OperationLog operationLog);
    
    /**
     * 分页查询操作日志
     */
    Result<Map<String, Object>> getOperationLogs(OperationLogQueryDTO queryDTO);
    
    /**
     * 根据ID查询操作日志详情
     */
    Result<OperationLogDetailVO> getOperationLogDetail(Long id);
    
    /**
     * 删除操作日志
     */
    Result<Void> deleteOperationLog(Long id);
    
    /**
     * 批量删除操作日志
     */
    Result<Void> batchDeleteOperationLogs(List<Long> ids);
    
    /**
     * 根据用户ID查询操作日志
     */
    Result<List<OperationLogVO>> getUserOperationLogs(Long userId, Integer limit);
    
    /**
     * 根据模块查询操作日志
     */
    Result<List<OperationLogVO>> getModuleOperationLogs(String module, Integer limit);
    
    /**
     * 查询失败的操作日志
     */
    Result<List<OperationLogVO>> getFailureLogs(LocalDateTime startTime, LocalDateTime endTime, Integer limit);
    
    /**
     * 获取操作统计数据
     */
    Result<Map<String, Object>> getOperationStatistics(LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 导出操作日志
     */
    Result<String> exportOperationLogs(OperationLogQueryDTO queryDTO);
    
    /**
     * 清理历史日志
     */
    Result<Integer> cleanHistoryLogs(Integer days);
    
    /**
     * 获取今日操作统计
     */
    Result<Map<String, Object>> getTodayStatistics();
    
    /**
     * 获取用户操作趋势
     */
    Result<Map<String, Object>> getUserOperationTrend(Long userId, Integer days);
}
